[TOC]
1 介绍
Headless Chrome是Chrome的无界面模式,提供不带浏览器界面的页面加载,信息抽取,页面内容截图等
操作Chrome使用 Chrome DevTools Protocol,它是Chrome DevTool使用的协议,可以允许通过API来操作Chromium、Chrome和其他基于Blink(基于Webkit)引擎的浏览器,Chrome DevTool团队维护这个API。
1.1 现在使用Chrome DevTools Protocol的项目 https://github.com/ChromeDevTools/awesome-chrome-devtools:
ChromeDriver 官方的Selenium/WebDriver的Chrome 实现
编辑器扩展
- VS Code
 - Sublime Web Inspector
 - WebStorm && Jetbrains Chrome Extension
 
开发工具扩展
- Chrome React Perf
 - React Developer Tools
 - VueJS Developer Tools
 - Redux DevTools
 - …
 
优势
- 资源占用少(相对于PhantomJS)
 - 服务端环境(命令行)
 - Web自动化
 - 支持现代Web标准和技术(ES6,ServiceWorkers,WebGL…)
 - 行为符合Web规范、版本能自动更新
 - Chronium/Chrome团队维护
 
2 Web自动化的需求
- 自动化页面加载、爬取、执行
- 数据抓取
 - 页面检测
 
 - 自动化页面测试
- 功能测试
 - 回归测试
 
 
3 举步维艰的PhantomJS
3.1 PhantomJS做什么
- 配合各种测试框架(Jasmine、QUnit、Mocha、WebDriver等)进行功能测试
 - 可编程页面内容截图和图片获取
 - 访问和操作页面元素,比如获取内容,填写表单等
 - 网络访问数据监控,类似于浏览器调试工具的网络功能
 
3.2 PhantomJS 问题
使用老版本的Webkit,不支持新的Web标准,跟真实浏览器存在差异
开发者维护难度大,主要维护者不干了,起因是Chrome 将支持 Headless模式
要解决的问题多,1800+
内存占用高,并发有问题,不稳定,有些奇奇怪怪的bug
4 效率低下的Selenium
- 使用WebDriver接口和浏览器驱动来操作真实浏览器,速度慢
 - 需要有图形界面,显示设备的支持
 - 需要使用Xvfb(virtual framebuffer X Server)
- X 是架构无关的远程图形界面和输入设备兼容的系统,C/S架构
 - 在没有物理输入和显示设备的机器上运行
 - 这里可以简单理解为 虚拟显示器或者显示器模拟器
 
 - 也支持Headless实现,实现跟Web标准有差异
 - 通过ChromeDriver(WebDriver的Chrome实现)的来操作Chrome,需要依赖ChromeDriver的更新
- 可以在ChromeDriver下载查看支持的Chrome版本
 - 目前支持Chrome v56-58,而Headless Chrome在Chrome 59才支持
 
 
5 其他类似的实现
- PhantomJS 基于Webkit
 - SlimerJS 基于Gecko
 - CasperJS 驱动PhantomJS 和 SlimerJS
 - trifleJS 使用V8和.Net WebBrowser实现的无界面 IE
 - 其他自行实现类浏览器功能的库
 
6 相关开发项目
- chrome-remote-interface 
- 是Chrome DevTools Protocol的NodeJS接口实现
 - 目前支持Google Chrome,Microsoft Edge,Node.js 6.3.0+,Safari(iOS)
 
 
7 参考资料
- Headless Chrome ReadMe
 - Getting Started with Headless Chrome
 - Headless Browsers
 - 相关工具 awesome-chrome-devtools
 - 技能树升级——Chrome Headless模式
 - Headless Chrome入门
 - 初探Headless Chrome
 - Lighthouse
 - Showcase Chrome Debugging Protocol Clients
 - 依赖chrome-remote-interface的项目
 - ChromeDevToolsProtocol
 - chrome devtool protocol
 - Chrome DevTools Protocol wiki
 - chrome-remote-interface
 - WebKitProtocol
 - 5 Reasons I Chose Selenium over PhantomJS
 - Running Headless Selenium with Chrome
 - Headless Chrome Architecture
 - vagrant
 - Vagrant 基础全面解析
 - 实战Chrome Headless数据抓取
 - 使用 Headless Chrome 进行页面渲染
 - Google 工程师带你入门 Headless Chrome
 - FEX Chrome 远程调试协议分析与实战
 - 【翻译】怎么在 macOS 上安装和使用 Headless Chrome
 - How to install and use Headless Chrome on OSX
 - Chromium 命令行参数说明文档
 - Chromium 命令行参数列表
 - Chrome 命令行参数开关源码
 - Headless Browser Testing With Xvfb
 - Headless Browser Testing with Chrome and Firefox
 - X Window System
 - HTMLUnitDriver & PhantomJS for Selenium Headless Testing
 - RUNNING SELENIUM WITH THE NEW HEADLESS CHROME
 
最后更新: 2022年03月02日 03:32
原始链接: http://rawbin-.github.io/automatic/2017-06-01-headless-ui-test/